package br.ufrn.cursoResidencia.repositorio;

import java.io.Serializable;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import br.ufrn.cursoResidencia.dominio.Convenio;
import br.ufrn.cursoResidencia.dominio.Orgao;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;

public class ConvenioRestClient implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -7766328819268312360L;
	
	
	private String getRestResultFromService(String url){
		
		Client c = Client.create();
	    WebResource wr = c.resource(url);
	    return  wr.get(String.class);
		
	}
	private JSONObject getJsonObjectFromService(String url) throws ParseException{
		JSONParser parser = new JSONParser();
		Object parsedJson = parser.parse(getRestResultFromService(url));
		JSONObject objResultado= (JSONObject)parsedJson;
		
		return objResultado;
		
	}
	
	protected Map<Integer,String> proponentes= new HashMap<Integer, String>();
	protected Map<Integer,String> situacaoProjeto= new HashMap<Integer, String>();
	
	public List<Orgao> getOrgaos(){
		
		List<Orgao>orgaos = new ArrayList<Orgao>();
		
	    try {
	    	
			JSONObject tudo= getJsonObjectFromService("http://api.convenios.gov.br/siconv/v1/consulta/orgaos.json");
			JSONArray orgaosJson=(JSONArray)tudo.get("orgaos");
			for (int i = 0; i < orgaosJson.size(); i++) {
				JSONObject objJson=(JSONObject) orgaosJson.get(i);
				orgaos.add(new Orgao(Integer.parseInt(objJson.get("id").toString()), objJson.get("nome").toString()));				
				
			}
			
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    return orgaos;
		
	}
	public List<Convenio> getConvenios(String codOrgao) throws ParseException, java.text.ParseException{
		
		String url = String.format("http://api.convenios.gov.br/siconv/v1/consulta/convenios.json?id_orgao_concedente=%s", codOrgao);
		
		List<Convenio> resultado= new ArrayList<Convenio>();
		
		JSONObject objResultado= getJsonObjectFromService(url);
		
		
		JSONArray conveniosJson =(JSONArray) objResultado.get("convenios");
		
		for (int i = 0; i < conveniosJson.size(); i++) {
			JSONObject convJson=(JSONObject) conveniosJson.get(i);
			Convenio novo = new Convenio();
			
			novo.setId(Integer.parseInt(convJson.get("id").toString()));
			novo.setCodOrgaoConcedente(codOrgao);
			novo.setModalidade(convJson.get("modalidade").toString());
			novo.setJustivicativaResumida(convJson.get("justificativa_resumida").toString());
			novo.setObjetoResumido(convJson.get("objeto_resumido").toString());
			
			
			
			//---Datas
			
			DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			
			novo.setDataInicioVigencia(format.parse(convJson.get("data_inicio_vigencia").toString()));
			novo.setDataFimVigencia(format.parse(convJson.get("data_fim_vigencia").toString()));
		    if(convJson.containsKey("data_assinatura")&& (convJson.get("data_assinatura")!=null) )
		    	novo.setDataAssinatura(format.parse(convJson.get("data_assinatura").toString()));
		    if(convJson.containsKey("data_publicacao")&& (convJson.get("data_publicacao")!=null)) 
		    	novo.setDataPublicacao(format.parse(convJson.get("data_publicacao").toString()));
			
			
			//---valores
			
			novo.setValorGlobal(Double.parseDouble(convJson.get("valor_global").toString()));
			novo.setValorContraPartida(Double.parseDouble(convJson.get("valor_contra_partida").toString()));
			novo.setValorRepasse(Double.parseDouble(convJson.get("valor_repasse").toString()));
			
			
			//--valores que estão em url
			novo.setServiceConcedente(((JSONObject)((JSONObject)convJson.get("orgao_concedente")).get("Orgao")).get("href").toString());
			novo.setServiceProponente(((JSONObject)((JSONObject)convJson.get("proponente")).get("Proponente")).get("href").toString());
			novo.setServiceSituacao(((JSONObject)((JSONObject)convJson.get("situacao")).get("SituacaoConvenio")).get("href").toString());
			
			
			resultado.add(novo);
			
		}
		
		return resultado;
	}
	public void carregarDadosConvenio(Convenio conv ) throws ParseException{
		String srvSituacao = conv.getServiceSituacao()+".json";
		//String svrConcedente=conv.getServiceConcedente()+"json";
		String svrProp=conv.getServiceProponente()+".json";
		
		conv.setSituacao(((JSONObject)(((JSONArray)getJsonObjectFromService(srvSituacao).get("situacaoconvenios")).get(0))).get("nome").toString());
		conv.setProponente(((JSONObject)(((JSONArray)getJsonObjectFromService(svrProp).get("proponentes")).get(0))).get("nome").toString());
		
		
	}
	
	

}

